<!DOCTYPE html>
<html>
  <head>
    <meta content="text/html; charset=UTF-8" http-equiv="content-type">
    <title>ch01-01</title>
    
<link href="css/style.css" rel="stylesheet" type="text/css" />
<link rel="stylesheet" href="thumbnailviewer.css" type="text/css" />

<script src="thumbnailviewer.js" type="text/javascript">

/***********************************************
* Image Thumbnail Viewer Script- © Dynamic Drive (www.dynamicdrive.com)
* This notice must stay intact for legal use.
* Visit http://www.dynamicdrive.com/ for full source code
***********************************************/

</script>


  </head>
<div class="os1">1.1 Qt介绍</div>
<p>
本节专门介绍背景故事，简略讲讲Qt是什么以及Qt的发展史。
</p>

<div class="os2">1.1.1 Qt是什么</div>
<p>
Qt（官方发音[kju:t]，音同cute）是跨平台的开发库，主要是开发图形用户界面（Graphical User Interface，GUI）应用程序，当然也可以开发非图形的命令行（Command User Interface，CUI）应用程序。
Qt支持众多的操作系统平台，如通用操作系统 Windows、Linux、Unix，智能手机系统 Android、iOS、WinPhone，
嵌入式系统 QNX、VxWorks 等等，应用广泛。当然 Qt 库本身包含的功能模块也日益丰富，
一直有新模块和第三方模块扩充。除了与操作系统底层结合特别紧密的，如驱动开发，
需要利用操作系统本身的函数库实现之外，其他大部分的应用程序开发都可以用 Qt 实现的。
Qt 是纯 C++ 开发的，所以学好 C++ 比较有必要。Qt 还存在 Python、Ruby、Perl 等脚本语言的绑定，
也就是说可以使用脚本语言开发基于 Qt 的程序。开源社区就是这样，好东西就会被派生扩展，到处使用，
越来越壮大。
</p>

<p>
初学者关于 Qt 编程一个可能的困惑就是 QML 和 C++ 该用哪个来编程，在 Qt4 时代主流的是传统部件（或叫控件）编程，所用的语言一般是 C++。
Qt5 诞生之时，正是手机移动设备蓬勃发展的时候，而传统的 C++ 部件编写的界面对手机应用程序却不是很方便，比如手机屏幕显示随意翻转，
这在传统桌面程序里基本遇不到，谁会将22寸显示器翻过来转过去呢。
为了适应手机移动应用开发， Qt5 将 QML 脚本编程提到与传统 C++ 部件编程相同的高度，力推 QML 界面编程，当然 QML 主要用于手机移动应用程序。
QML 包含大量使用手机移动设备的功能模块，比如基本部件（QtQuick模块）、GPS定位、渲染特效、蓝牙、NFC、WebkKit等等。
简单地说，如果是传统桌面应用程序，使用 C++ 部件开发就足够了，如果学习目标是手机移动应用开发，QML 是更好的选择。
本教程是针对传统 C++ 部件开发的，QML 目前不在考虑范围之内。
关于 QML 编程已经有相关书籍上市，读者可以去搜索 QML 、QtQuick 或 Qt5 等方面的书籍进行选购学习。
学习 QML 之前建议先学 C++ 部件编程，否则遇到底层问题，QML 不一定好处理，通常 QML 也会调用 C++ 编写的插件来完善功能。
另外，在网上看到一本 QML 电子书，感兴趣的可以去下载：<br>
<a href="https://github.com/cwc1987/QmlBook-In-Chinese" target="new">
https://github.com/cwc1987/QmlBook-In-Chinese
</a>
</p>

<div class="os2">1.1.2 Qt的历史</div>
<p>
说到 Qt 的发展史，就得从二十几年前说起，Qt 最早是1991年由挪威的 Eirik Chambe-Eng 和 Haavard Nord 开发的，
他们随后于1994年3月4号正式成立奇趣科技公司（Trolltech）。Qt原本是商业授权的跨平台开发库，
在2000年奇趣科技公司为开源社区发布了遵循 GPL（GNU General Public License）许可证的开源版本。
在2008年，诺基亚公司收购了奇趣科技公司，并增加了 LGPL（GNU Lesser General Public License）的授权模式。
诺基亚联合英特尔利用 Qt 开发了全新的智能手机系统 MeeGo，可惜遭遇了微软木马屠城，诺基亚被迫放弃了 MeeGo，
而 Qt 商业授权业务也于2011年3月出售给了芬兰IT服务公司 Digia。当然好消息是 Digia 于2014年9月宣布成立
Qt Company 全资子公司，独立运营 Qt 商业授权业务。目前 Qt 公司大力推广移动平台开发和商业应用，
总的来说 Qt 历经曲折，现在算是步入正轨了。
</p>

<p>
永远不要忽视微软帝国的威胁，作为软件业的一代霸主，
任何人都不要天真地试图和它做朋友，因为霸主不可能有朋友。
微软的木马屠城是所有诺基亚人和芬兰人的痛，希望读者们都记牢这条。
</p>

<div class="os2">1.1.3 Qt和KDE</div>
<p>
之前提到 Qt 原本是商业授权软件，是怎么开源的呢？这就涉及 Qt 和 KDE 的纠葛了。
KDE 是 Linux 操作系统的桌面环境，与 GNOME 桌面是类似的，作为开源桌面它们竞争的情况更为多见。
KDE 是采用 GPL 许可证发布的开源软件，而最初 Qt 是商业授权的，存在商业侵权风险，
GNOME 则是基于开源 GTK 库的，没有什么商业风险，这一度是 GNOME 优越于 KDE 的特性。
由于 Qt 的商业授权，KDE 社区一度混乱纠结，与此同时 GNOME 则如火如荼发展起来了。
KDE 毕竟算是亲儿子，被另一波人欺负，奇趣科技公司当然看不下去了，
最后是奇趣科技公司为了赢得开发者的支持，为 Qt 增加了 GPL 的开源授权，
对于开源社区而言，遵循 GPL 使用 Qt 就不需要付费，这为 KDE 解决了燃眉之急。
之后 KDE 桌面和 GNOME 都发展壮大起来，都做得越来越好了。
关于 KDE 和 GNOME 的故事详情可以围观下面的帖子：<br />
KDE/QT vs GNOME/GTK：<a href="http://bbs.chinaunix.net/thread-1968232-1-1.html" target="new">http://bbs.chinaunix.net/thread-1968232-1-1.html
</a>
</p>
<p>
除了商业授权，目前 Qt 的开源授权有两种，一种是 GPL 授权，另一种是 LGPL 授权（诺基亚收购后新增）。
对这两种开源授权，简单来说，使用 GPL 版本的软件一定还是 GPL 的开源软件，
无论是使用了 Qt 的程序代码还是修改了 Qt 库代码，都必须按照 GPL 来发布，这是 GPL 的传染性。
GPL 是什么都要开源，这对商业软件应用是不利的，所以诺基亚增加了 LGPL 授权
（第一个 L 可以叫 Lesser 宽松版或 Library 开发库版）。
使用 LGPL 授权就可以利用 Qt 官方动态链接库，而不必开放商业代码。只要不修改和定制 Qt 库，
仅使用 Qt 官方发布的动态链接库就可以不开源，这是商业友好的授权模式。
其实只要不是做商业，就不太需要关注用什么授权，以 GPL 授权发布程序代码就可以了。
</p>

<div class="os2">1.1.4 Qt和智能手机</div>
<p>
Qt 目前支持主流的 Android、iOS、WinPhone 等智能机操作系统。MeeGo 是基于 Qt 开发的操作系统，由于被诺基亚抛弃了，
只剩一代绝版诺基亚 N9 手机。诺基亚手机部门出售给微软之后，大部分诺基亚手机系统开发人员都被遣散了。
原来诺基亚的一部分人成立新的 Jolla（卓蓝）公司，发布了 MeeGo 的衍生版智能手机系统 Sailfish（旗鱼），
相应的手机和平板也发布开卖了。
另一拨人投靠了 Tizen（泰泽），Tizen 是英特尔和三星力推的智能手机系统，该系统整合了 Limo 和 MeeGo，
因为 MeeGo 系统被诺基亚抛弃，英特尔其实是被出卖了，所以只能联合三星重造智能手机系统 Tizen。
目前基于 Tizen 的首款手机三星 Z1 在印度上市了。在 Tizen 阵营，国内有中兴、百度涉及了。
Qt 开源项目里也有 Qt for Tizen 版本，有兴趣的可以去搜搜。
</p>
<p>
Qt 公司有专门针对移动开发的商业版本，20 欧元或 25 美元一个月。
不做商业可以无视这个，用开源版本也是可以开发如 Android、iOS、WinPhone 应用的。
本教程关注的是传统桌面操作系统开发的，移动开发可以参考 Qt 官方的文档。
</p>

<p>
本节最后附上关于 Qt 的两个官方网站链接：<br />
Qt 商业公司：<a href="http://www.qt.io/" target="new">http://www.qt.io/
</a><br />
Qt 开源项目：<a href="http://qt-project.org/" target="new">http://qt-project.org/
</a>

</p>
<br />


<table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">
	<tbody>
	<tr>
		<td style="width: 40%;"><div style="text-align: center;"><a href="ch01-00.htm"><img class="pic" style="width: 32px; height: 32px;" alt="prev" src="images/pics/prev.png" /></a></div></td>
		<td style="width: 20%;"><div style="text-align: center;"><a href="contents.htm"><img class="pic" style="width: 32px; height: 32px;" alt="contents" src="images/pics/contents.png" /></a></div></td>
		<td style="width: 40%;"><div style="text-align: center;"><a href="ch01-02.htm"><img class="pic" style="width: 32px; height: 32px;" alt="next" src="images/pics/next.png" /></a></div></td>
	</tr>
</tbody>
</table>


</html>
